home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / fpc / gtlayout / units / gtlayout.pas
Encoding:
Pascal/Delphi Source File  |  2000-01-01  |  29.1 KB  |  1,143 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 2000 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16.  
  17. {
  18.     History:
  19.  
  20.     This is just a quick translation of gtlayout.h.
  21.     I have made a small testprogram and all is well.
  22.  
  23.     16 Jul 2000.
  24.  
  25.     Added MessageBox for error report.
  26.     31 Jul 2000.
  27.  
  28.     nils.sjoholm@mailbox.swipnet.se
  29.  
  30. }
  31.  
  32.  
  33. UNIT GTLAYOUT;
  34.  
  35. INTERFACE
  36.  
  37. USES Exec,intuition,utility, gadtools,graphics;
  38.  
  39.  
  40.  
  41.   { Kinds of objects supported in addition to the normal GadTools kinds  }
  42.  
  43.   const
  44.  
  45.      GTLAYOUTNAME : PCHar = 'gtlayout.library';
  46.  
  47.      HORIZONTAL_KIND = 45;
  48.      VERTICAL_KIND = 46;
  49.      END_KIND = 47;
  50.      FRAME_KIND = 48;
  51.      BOX_KIND = 49;
  52.      FRACTION_KIND = 50;
  53.      XBAR_KIND = 51;
  54.      YBAR_KIND = 52;
  55.      PASSWORD_KIND = 53;
  56.      GAUGE_KIND = 54;
  57.      TAPEDECK_KIND = 55;
  58.      LEVEL_KIND = 56;
  59.      BOOPSI_KIND = 57;
  60.      POPUP_KIND = 58;
  61.      TAB_KIND = 59;
  62.      BLANK_KIND = 60;
  63.      IMAGE_KIND = 61;
  64.  
  65.   { Where to place a gadget label  }
  66.  
  67.      PLACE_Left   = 0;
  68.      PLACE_Right  = 1;
  69.      PLACE_Above  = 2;
  70.      PLACE_In     = 3;
  71.      PLACE_Below  = 4;
  72.  
  73.     { How to align text lines in BOX_KIND gadgets  }
  74.  
  75.      ALIGNTEXT_Left      = 0;
  76.      ALIGNTEXT_Centered  = 1;
  77.      ALIGNTEXT_Right     = 2;
  78.      ALIGNTEXT_Pad       = 3;
  79.  
  80.     { The button images available for TAPEDECK_KIND gadgets.  }
  81.  
  82.         TDBT_Backward   = 0;
  83.     TDBT_Forward    = 1;
  84.     TDBT_Previous   = 2;
  85.     TDBT_Next       = 3;
  86.     TDBT_Stop       = 4;
  87.     TDBT_Pause      = 5;
  88.     TDBT_Record     = 6;
  89.     TDBT_Rewind     = 7;
  90.     TDBT_Eject      = 8;
  91.     TDBT_Play       = 9;
  92.  
  93.     TDBTLAST        = 10;
  94.  
  95.     { The frame types for groups.  }
  96.         FRAMETYPE_None    = 0;
  97.         FRAMETYPE_Label   = 1;
  98.     FRAMETYPE_Tab     = 2;
  99.  
  100.     { How to align the window opened by LT_Build() on the screen.  }
  101.        ALIGNF_Right = 1 shl 0;
  102.        ALIGNF_Left = 1 shl 1;
  103.        ALIGNF_Top = 1 shl 2;
  104.        ALIGNF_Bottom = 1 shl 3;
  105.        ALIGNF_ExtraRight = 1 shl 4;
  106.        ALIGNF_ExtraLeft = 1 shl 5;
  107.        ALIGNF_ExtraTop = 1 shl 6;
  108.        ALIGNF_ExtraBottom = 1 shl 7;
  109.  
  110. { Generic tags, applicable for several object types }
  111.      LA_Chars        = TAG_USER+2;
  112.      LA_LabelPlace        = TAG_USER+3;
  113.      LA_ExtraSpace        = TAG_USER+4;
  114.      LA_NoKey        = TAG_USER+30;
  115.      LA_HighLabel        = TAG_USER+31;
  116.      LA_LabelText        = TAG_USER+37;
  117.      LA_LabelID        = TAG_USER+38;
  118.      LA_ID            = TAG_USER+39;
  119.      LA_Type            = TAG_USER+40;
  120.      LA_PageSelector        = TAG_USER+79;
  121.      LA_LabelChars        = TAG_USER+107;
  122.      LA_DefaultSize        = TAG_USER+170;
  123.      LA_LayoutSpace        = TAG_USER+189;
  124.  
  125. { Storage type tags }
  126.      LA_BYTE            = TAG_USER+63;
  127.      LA_UBYTE        = TAG_USER+64;
  128.      LA_WORD            = TAG_USER+65;
  129.      LA_BOOL            = TAG_USER+65;
  130.      LA_UWORD        = TAG_USER+66;
  131.      LA_LONG            = TAG_USER+67;
  132.      LA_ULONG        = TAG_USER+68;
  133.      LA_STRPTR        = TAG_USER+69;
  134.  
  135. { for use with LT_GetAttributes() only }
  136.      LA_Left            = TAG_USER+16;
  137.      LA_Top            = TAG_USER+17;
  138.      LA_Width        = TAG_USER+18;
  139.      LA_Height        = TAG_USER+19;
  140.      LA_LabelLeft        = TAG_USER+114;
  141.      LA_LabelTop        = TAG_USER+115;
  142.  
  143. { BOOPSI_KIND }
  144.      LABO_TagCurrent        = TAG_USER+119;
  145.      LABO_TagTextAttr    = TAG_USER+120;
  146.      LABO_TagDrawInfo    = TAG_USER+121;
  147.      LABO_TagLink        = TAG_USER+129;
  148.      LABO_TagScreen        = TAG_USER+132;
  149.      LABO_Link        = TAG_USER+7;
  150.      LABO_ClassInstance    = TAG_USER+122;
  151.      LABO_ClassName        = TAG_USER+123;
  152.      LABO_ClassLibraryName    = TAG_USER+124;
  153.      LABO_ExactWidth        = TAG_USER+127;
  154.      LABO_ExactHeight    = TAG_USER+128;
  155.      LABO_RelFontHeight    = TAG_USER+131;
  156.      LABO_Object        = TAG_USER+133;
  157.      LABO_FullWidth        = TAG_USER+135;
  158.      LABO_FullHeight        = TAG_USER+136;
  159.      LABO_ActivateHook    = TAG_USER+141;
  160.  
  161. { BOX_KIND }
  162.      LABX_Labels        = TAG_USER+12;
  163.      LABX_Lines        = TAG_USER+13;
  164.      LABX_Chars        = TAG_USER+2;
  165.      LABX_Rows        = TAG_USER+1;
  166.      LABX_Index        = TAG_USER+14;
  167.      LABX_Text        = TAG_USER+15;
  168.      LABX_AlignText        = TAG_USER+27;
  169.      LABX_DrawBox        = TAG_USER+11;
  170.      LABX_FirstLabel        = TAG_USER+44;
  171.      LABX_LastLabel        = TAG_USER+45;
  172.      LABX_ReserveSpace    = TAG_USER+72;
  173.      LABX_LabelTable        = TAG_USER+98;
  174.      LABX_FirstLine        = TAG_USER+152;
  175.      LABX_LastLine        = TAG_USER+153;
  176.      LABX_LineTable        = TAG_USER+156;
  177.      LABX_Line        = TAG_USER+161;
  178.      LABX_LineID        = TAG_USER+162;
  179.      LABX_TextPen        = TAG_USER+172;
  180.      LABX_BackPen        = TAG_USER+173;
  181.      LABX_Spacing        = TAG_USER+180;
  182.  
  183. { BUTTON_KIND }
  184.      LABT_ReturnKey        = TAG_USER+34;
  185.      LABT_DefaultButton    = TAG_USER+34;
  186.      LABT_EscKey        = TAG_USER+56;
  187.      LABT_ExtraFat        = TAG_USER+29;
  188.      LABT_Lines        = TAG_USER+140;
  189.      LABT_FirstLine        = TAG_USER+44;
  190.      LABT_LastLine        = TAG_USER+45;
  191.      LABT_DefaultCorrection    = TAG_USER+145;
  192.      LABT_Smaller        = TAG_USER+147;
  193.  
  194. { CYCLE_KIND }
  195.      LACY_FirstLabel        = TAG_USER+44;
  196.      LACY_LastLabel        = TAG_USER+45;
  197.      LACY_LabelTable        = TAG_USER+98;
  198.      LACY_AutoPageID        = TAG_USER+103;
  199.      LACY_TabKey        = TAG_USER+118;
  200.  
  201. { FRACTION_KIND }
  202.      LAFR_IncrementerHook    = TAG_USER+85;
  203.  
  204. { FRAME_KIND }
  205.      LAFR_InnerWidth        = TAG_USER+9;
  206.      LAFR_InnerHeight    = TAG_USER+10;
  207.      LAFR_DrawBox        = TAG_USER+11;
  208.      LAFR_RefreshHook    = TAG_USER+117;
  209.      LAFR_GenerateEvents    = TAG_USER+155;
  210.      LAFR_ResizeX        = TAG_USER+109;
  211.      LAFR_ResizeY        = TAG_USER+110;
  212.  
  213. { GAUGE_KIND }
  214.      LAGA_Percent        = TAG_USER+36;
  215.      LAGA_InfoLength        = TAG_USER+70;
  216.      LAGA_InfoText        = TAG_USER+71;
  217.      LAGA_NoTicks        = TAG_USER+143;
  218.      LAGA_Discrete        = TAG_USER+144;
  219.      LAGA_Tenth        = TAG_USER+144;
  220.  
  221. { IMAGE_KIND }
  222.      LAIM_Image        = TAG_USER+181;
  223.      LAIM_BitMap        = TAG_USER+182;
  224.      LAIM_BitMapLeft        = TAG_USER+183;
  225.      LAIM_BitMapTop        = TAG_USER+184;
  226.      LAIM_BitMapWidth    = TAG_USER+185;
  227.      LAIM_BitMapHeight    = TAG_USER+186;
  228.      LAIM_BitMapMask        = TAG_USER+187;
  229.  
  230. { INTEGER_KIND }
  231.      LAIN_LastGadget        = TAG_USER+28;
  232.      LAIN_Min        = TAG_USER+23;
  233.      LAIN_Max        = TAG_USER+24;
  234.      LAIN_UseIncrementers    = TAG_USER+57;
  235.      LAIN_Incrementers    = TAG_USER+57;
  236.      LAIN_HistoryLines    = TAG_USER+59;
  237.      LAIN_HistoryHook    = TAG_USER+80;
  238.      LAIN_IncrementerHook    = TAG_USER+85;
  239.      LAIN_Activate        = TAG_USER+148;
  240.  
  241. { LISTVIEW_KIND }
  242.      LALV_ExtraLabels    = TAG_USER+26;
  243.      LALV_Labels        = TAG_USER+33;
  244.      LALV_CursorKey        = TAG_USER+35;
  245.      LALV_Columns        = TAG_USER+2;
  246.      LALV_Lines        = TAG_USER+1;
  247.      LALV_Link        = TAG_USER+7;
  248.      LALV_FirstLabel        = TAG_USER+44;
  249.      LALV_LastLabel        = TAG_USER+45;
  250.      LALV_MaxGrowX        = TAG_USER+77;
  251.      LALV_MaxGrowY        = TAG_USER+78;
  252.      LALV_LabelTable        = TAG_USER+98;
  253.      LALV_LockSize        = TAG_USER+106;
  254.      LALV_ResizeX        = TAG_USER+109;
  255.      LALV_ResizeY        = TAG_USER+110;
  256.      LALV_MinChars        = TAG_USER+111;
  257.      LALV_MinLines        = TAG_USER+112;
  258.      LALV_FlushLabelLeft    = TAG_USER+113;
  259.      LALV_TextAttr        = TAG_USER+138;
  260.      LALV_AutoPageID        = TAG_USER+103;
  261.      LALV_Selected        = TAG_USER+167;
  262.      LALV_AdjustForString    = TAG_USER+174;
  263.  
  264. { LEVEL_KIND }
  265.      LAVL_Min        = GTSL_Min;
  266.      LAVL_Max        = GTSL_Max;
  267.      LAVL_Level        = GTSL_Level;
  268.      LAVL_LevelFormat    = GTSL_LevelFormat;
  269.      LAVL_LevelPlace        = GTSL_LevelPlace;
  270.      LAVL_DispFunc        = GTSL_DispFunc;
  271.      LAVL_FullCheck        = TAG_USER+22;
  272.      LAVL_Freedom        = TAG_USER+177    { (I)  New in V41 };
  273.      LAVL_Ticks        = TAG_USER+178    { (I)  New in V41 };
  274.      LAVL_NumTicks        = TAG_USER+179    { (IS) New in V41 };
  275.      LAVL_Lines        = TAG_USER+1;
  276.  
  277. { MX_KIND }
  278.      LAMX_FirstLabel        = TAG_USER+44;
  279.      LAMX_LastLabel        = TAG_USER+45;
  280.      LAMX_LabelTable        = TAG_USER+98;
  281.      LAMX_TabKey        = TAG_USER+118;
  282.      LAMX_AutoPageID        = TAG_USER+103;
  283.  
  284. { PALETTE_KIND }
  285.      LAPA_SmallPalette    = TAG_USER+32;
  286.      LAPA_Lines        = TAG_USER+1;
  287.      LAPA_UsePicker        = TAG_USER+137;
  288.      LAPA_Picker        = TAG_USER+137;
  289.  
  290. { PASSWORD_KIND }
  291.      LAPW_String             = GTST_String;
  292.      LAPW_LastGadget        = TAG_USER+28;
  293.      LAPW_HistoryLines    = TAG_USER+59;
  294.      LAPW_HistoryHook    = TAG_USER+80;
  295.      LAPW_Activate        = TAG_USER+148;
  296.      LAPW_MaxChars        = GTST_MaxChars;
  297.  
  298. { POPUP_KIND }
  299.      LAPU_FirstLabel        = TAG_USER+44;
  300.      LAPU_LastLabel        = TAG_USER+45;
  301.      LAPU_LabelTable        = TAG_USER+98;
  302.      LAPU_AutoPageID        = TAG_USER+103;
  303.      LAPU_TabKey        = TAG_USER+118;
  304.      LAPU_Labels        = GTCY_Labels;
  305.      LAPU_Active        = GTCY_Active;
  306.      LAPU_CentreActive    = TAG_USER+163;
  307.  
  308. { SLIDER_KIND }
  309.      LASL_FullCheck        = TAG_USER+22;
  310.  
  311. { SCROLLER_KIND }
  312.      LASC_Thin        = TAG_USER+62;
  313.      LASC_FullSize        = TAG_USER+188;
  314.  
  315. { STRING_KIND }
  316.      LAST_LastGadget        = TAG_USER+28;
  317.      LAST_Link        = TAG_USER+7;
  318.      LAST_Picker        = TAG_USER+5;
  319.      LAST_UsePicker        = TAG_USER+5;
  320.      LAST_HistoryLines    = TAG_USER+59;
  321.      LAST_HistoryHook    = TAG_USER+80;
  322.      LAST_CursorPosition    = TAG_USER+105;
  323.      LAST_Activate        = TAG_USER+148;
  324.      LAST_ValidateHook    = TAG_USER+165;
  325.  
  326. { TAB_KIND }
  327.      LATB_FirstLabel        = TAG_USER+44;
  328.      LATB_LastLabel        = TAG_USER+45;
  329.      LATB_LabelTable        = TAG_USER+98;
  330.      LATB_AutoPageID        = TAG_USER+103;
  331.      LATB_TabKey        = TAG_USER+118;
  332.      LATB_Labels        = GTCY_Labels;
  333.      LATB_Active        = GTCY_Active;
  334.      LATB_FullWidth        = TAG_USER+149;
  335.      LATB_FullSize        = TAG_USER+149;
  336.  
  337. { TAPEDECK_KIND }
  338.      LATD_ButtonType        = TAG_USER+86;
  339.      LATD_Toggle        = TAG_USER+87;
  340.      LATD_Pressed        = TAG_USER+88;
  341.      LATD_Smaller        = TAG_USER+89;
  342.      LATD_Tick        = TAG_USER+139;
  343.  
  344. { TEXT_KIND }
  345.      LATX_Picker        = TAG_USER+5;
  346.      LATX_UsePicker        = TAG_USER+5;
  347.      LATX_LockSize        = TAG_USER+106;
  348.  
  349. { VERTICAL_KIND and HORIZONTAL_KIND }
  350.      LAGR_Spread        = TAG_USER+6;
  351.      LAGR_SameSize        = TAG_USER+8;
  352.      LAGR_LastAttributes    = TAG_USER+46;
  353.      LAGR_ActivePage        = TAG_USER+58;
  354.      LAGR_Frame        = TAG_USER+104;
  355.      LAGR_IndentX        = TAG_USER+130;
  356.      LAGR_IndentY        = TAG_USER+134;
  357.      LAGR_NoIndent        = TAG_USER+146;
  358.      LAGR_SameWidth        = TAG_USER+150;
  359.      LAGR_SameHeight        = TAG_USER+151;
  360.      LAGR_FrameGroup        = TAG_USER+168;
  361.      LAGR_AlignRight        = TAG_USER+171;
  362.  
  363. { XBAR_KIND }
  364.      LAXB_FullSize        = TAG_USER+50;
  365.      LAXB_FullWidth        = TAG_USER+50;
  366.  
  367. { Applicable for layout handle only }
  368.      LAHN_TextAttr        = TAG_USER+41;
  369.      LAHN_AutoActivate    = TAG_USER+42;
  370.      LAHN_LocaleHook        = TAG_USER+4;
  371.      LAHN_CloningPermitted    = TAG_USER+61;
  372.      LAHN_EditHook        = TAG_USER+74;
  373.      LAHN_ExactClone        = TAG_USER+75;
  374.      LAHN_MenuGlyphs        = TAG_USER+76;
  375.      LAHN_Parent        = TAG_USER+83;
  376.      LAHN_BlockParent    = TAG_USER+84;
  377.      LAHN_SimpleClone    = TAG_USER+90;
  378.      LAHN_ExitFlush        = TAG_USER+108;
  379.      LAHN_UserData        = TAG_USER+116;
  380.      LAHN_RawKeyFilter    = TAG_USER+142;
  381.      LAHN_DontPickShortcuts    = TAG_USER+154;
  382.      LAHN_NoKeys        = TAG_USER+154;
  383.      LAHN_PubScreen        = TAG_USER+157;
  384.      LAHN_PubScreenName    = TAG_USER+158;
  385.      LAHN_PubScreenFallBack    = TAG_USER+159;
  386.      LAHN_CloneScreenTitle    = TAG_USER+175;
  387.      LAHN_CloneScreenTitleID    = TAG_USER+176;
  388.      LAHN_TopGroupType    = TAG_USER+190;
  389.  
  390. { Applicable for menus only. }
  391.      LAMN_FirstLabel        = LABX_FirstLabel;
  392.      LAMN_LastLabel        = LABX_LastLabel;
  393.      LAMN_LabelTable        = TAG_USER+98;
  394.      LAMN_TitleText        = TAG_USER+17000;
  395.      LAMN_TitleID        = TAG_USER+17001;
  396.      LAMN_ItemText        = TAG_USER+17002;
  397.      LAMN_ItemID        = TAG_USER+17003;
  398.      LAMN_SubText        = TAG_USER+17004;
  399.      LAMN_SubID        = TAG_USER+17005;
  400.      LAMN_KeyText        = TAG_USER+17006;
  401.      LAMN_KeyID        = TAG_USER+17007;
  402.      LAMN_CommandText    = TAG_USER+17008;
  403.      LAMN_CommandID        = TAG_USER+17009;
  404.      LAMN_MutualExclude    = TAG_USER+17010;
  405.      LAMN_UserData        = TAG_USER+17011;
  406.      LAMN_Disabled        = TAG_USER+17012;
  407.      LAMN_CheckIt        = TAG_USER+17013;
  408.      LAMN_Checked        = TAG_USER+17014;
  409.      LAMN_Toggle        = TAG_USER+17015;
  410.      LAMN_Code        = TAG_USER+17016;
  411.      LAMN_Qualifier        = TAG_USER+17017;
  412.      LAMN_Char        = TAG_USER+17018;
  413.      LAMN_ID            = TAG_USER+17019;
  414.      LAMN_AmigaGlyph        = TAG_USER+17020;
  415.      LAMN_CheckmarkGlyph    = TAG_USER+17021;
  416.      LAMN_Error        = TAG_USER+17022;
  417.      LAMN_Screen        = TAG_USER+17023;
  418.      LAMN_TextAttr        = TAG_USER+17024;
  419.      LAMN_LayoutHandle    = TAG_USER+17025;
  420.      LAMN_Handle        = TAG_USER+17025;
  421.      LAMN_ExtraSpace        = TAG_USER+17026;
  422.      LAMN_FullMenuNum    = TAG_USER+160;
  423.  
  424. { Applicable for window only }
  425.      LAWN_Menu        = TAG_USER+25;
  426.      LAWN_UserPort        = TAG_USER+47;
  427.      LAWN_Left        = TAG_USER+48;
  428.      LAWN_Top        = TAG_USER+49;
  429.      LAWN_Zoom        = TAG_USER+50;
  430.      LAWN_MaxPen        = TAG_USER+52;
  431.      LAWN_BelowMouse        = TAG_USER+53;
  432.      LAWN_MoveToWindow    = TAG_USER+54;
  433.      LAWN_AutoRefresh    = TAG_USER+55;
  434.      LAWN_HelpHook        = TAG_USER+73;
  435.      LAWN_Parent        = TAG_USER+81;
  436.      LAWN_BlockParent    = TAG_USER+82;
  437.      LAWN_SmartZoom        = TAG_USER+91;
  438.      LAWN_Title        = TAG_USER+92;
  439.      LAWN_TitleText        = TAG_USER+92;
  440.      LAWN_Bounds        = TAG_USER+93;
  441.      LAWN_ExtraWidth        = TAG_USER+94;
  442.      LAWN_ExtraHeight    = TAG_USER+95;
  443.      LAWN_IDCMP        = TAG_USER+96;
  444.      LAWN_AlignWindow    = TAG_USER+97;
  445.      LAWN_TitleID        = TAG_USER+99;
  446.      LAWN_FlushLeft        = TAG_USER+14000    { NOTEZ-BIEN: = TAG_USER+99 = WA_Dummy and can clash };
  447.      LAWN_FlushTop        = TAG_USER+14001    {             with Intuition!                      };
  448.      LAWN_Show        = TAG_USER+14002;
  449.      LAWN_MenuTemplate    = TAG_USER+14003;
  450.      LAWN_MenuTags        = TAG_USER+14004;
  451.      LAWN_NoInitialRefresh    = TAG_USER+164;
  452.      LAWN_LimitWidth        = TAG_USER+165;
  453.      LAWN_LimitHeight    = TAG_USER+166;
  454.      LAWN_UserData        = TAG_USER+169;
  455.  
  456. { Private tags; do not use, or you'll run into trouble! }
  457.      LA_Private1        = TAG_USER+100;
  458.      LA_Private2        = TAG_USER+101;
  459.  
  460. { Last tag item value used }
  461.      LAST_TAG        = TAG_USER+190;
  462.  
  463.     { Identifies the absence of a link for a listview or a string gadget  }
  464.        NIL_LINK = -(2);
  465.     {                                                                            }
  466.     { String gadget type history hook support: you will either get
  467.        the following value passed as the message parameter to your
  468.        hook function, or a pointer to a null-terminated string you should
  469.        copy and create a Node from, which you should then add to the tail
  470.        of your history list. Place a pointer to your history list in the
  471.        Hook.h_Data entry.
  472.       }
  473.        HISTORYHOOK_DiscardOldest = 0;
  474.     {                                                                            }
  475.     { Refresh hook support: you will get the following structure
  476.        passed as the message and a pointer to the LayoutHandle as
  477.        the object.
  478.       }
  479.  
  480.     type
  481.  
  482.        tRefreshMsg = record
  483.             ID : LONG;
  484.             Left : WORD;
  485.             Top : WORD;
  486.             Width : WORD;
  487.             Height : WORD;
  488.          end;
  489.  
  490.        pRefreshMsg = ^tRefreshMsg;
  491.     {                                                                            }
  492.     { Incrementer hook support: you will get the current value
  493.        passed as the object and one of the following values as
  494.        the message. Return the number to be used.
  495.       }
  496. const
  497.       INCREMENTERMSG_Decrement = -1;    { Decrement value }
  498.       INCREMENTERMSG_Initial   =  0;    { Initial value passed upon gadget creation }
  499.       INCREMENTERMSG_Increment =  1;    { Increment value }
  500.  
  501.  
  502.     const
  503.        TICKS_None  = 0;    {/* No ticks please */}
  504.        TICKS_Left  = 1;    {/* Place ticks left of the slider (FREEVERT only) */}
  505.        TICKS_Both  = 2;        {/* Place ticks on both sides of the slider */}
  506.        TICKS_Above = TICKS_Left;
  507.     {                                                                            }
  508.     { The central data structure of the layout process.  }
  509.     { Requires gtlayout.library V9  }
  510.     { Requires gtlayout.library V13  }
  511.     { Hands off, private fields follow....  }
  512.  
  513.     type
  514.  
  515.        tLayoutHandle = record
  516.             Screen : PScreen;
  517.             DrawInfo : PDrawInfo;
  518.             Window : PWindow;
  519.             VisualInfo : Pointer;
  520.             AmigaGlyph : PImage;
  521.             CheckGlyph : PImage;
  522.             UserData : Pointer;
  523.             Menu : PMenu;
  524.          end;
  525.  
  526.        pLayoutHandle = ^tLayoutHandle;
  527.  
  528.     { Help key hook support: the hook will be called with a "struct IBox  "
  529.        as the object and a "struct HelpMsg  ". The IBox describes the object
  530.        the mouse was positioned over, such as a button, a listview, etc.
  531.        The "ObjectID" will indicate the ID of the object the mouse was
  532.        positioned over. The ID will be -1 if no object was to be found.
  533.       }
  534.     { Window layout handle  }
  535.     { ID of the object, -1 for full window  }
  536.  
  537.        tHelpMsg = record
  538.             Handle : PLayoutHandle;
  539.             ObjectID : LONG;
  540.          end;
  541.  
  542.        pHelpMsg = ^tHelpMsg;
  543.  
  544.  
  545. PROCEDURE LT_LevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
  546. PROCEDURE LT_DeleteHandle(last : pLayoutHandle);
  547. FUNCTION LT_CreateHandle(par1 : pScreen; last : pTextAttr) : pLayoutHandle;
  548. FUNCTION LT_CreateHandleTagList(par1 : pScreen; tags : pTagItem) : pLayoutHandle;
  549. FUNCTION LT_Rebuild(par1 : pLayoutHandle; par2 : pIBox; par3 : LONGINT; par4 : LONGINT; last : LONGINT) : BOOLEAN;
  550. PROCEDURE LT_HandleInput(par1 : pLayoutHandle; par2 : ulong; par3 : ulong; par4 : WORD;  last : pGadget);
  551. PROCEDURE LT_BeginRefresh(last : pLayoutHandle);
  552. PROCEDURE LT_EndRefresh(par1 : pLayoutHandle; last : LONGINT);
  553. FUNCTION LT_GetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : LONGINT;
  554. PROCEDURE LT_SetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem);
  555. PROCEDURE LT_AddA(par1 : pLayoutHandle; par2 : LONGINT; par3 : pCHAR; par4 : LONGINT; tags : pTagItem);
  556. PROCEDURE LT_NewA(par1 : pLayoutHandle; tags : pTagItem);
  557. PROCEDURE LT_EndGroup(last : pLayoutHandle);
  558. FUNCTION LT_LayoutA(par1 : pLayoutHandle; par2 : pCHAR; par3 : pIBox; par4 : LONGINT; par5 : LONGINT; par6 : ulong; par7 : LONGINT; tags : pTagItem) : pWindow;
  559. FUNCTION LT_LayoutMenusA(par1 : pLayoutHandle; par2 : pNewMenu; tags : pTagItem) : pMenu;
  560. FUNCTION LT_LabelWidth(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
  561. FUNCTION LT_LabelChars(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
  562. PROCEDURE LT_LockWindow(last : pWindow);
  563. PROCEDURE LT_UnlockWindow(last : pWindow);
  564. PROCEDURE LT_DeleteWindowLock(last : pWindow);
  565. PROCEDURE LT_ShowWindow(par1 : pLayoutHandle; last : LONGINT);
  566. PROCEDURE LT_Activate(par1 : pLayoutHandle; last : LONGINT);
  567. FUNCTION LT_PressButton(par1 : pLayoutHandle; last : LONGINT) : BOOLEAN;
  568. FUNCTION LT_GetCode(par1 : ulong; par2 : ulong; par3 : ulong; last : pGadget) : LONGINT;
  569. FUNCTION LT_GetIMsg(last : pLayoutHandle) : pIntuiMessage;
  570. PROCEDURE LT_ReplyIMsg(last : pIntuiMessage);
  571. FUNCTION LT_BuildA(par1 : pLayoutHandle; tags : pTagItem) : pWindow;
  572. FUNCTION LT_RebuildTagList(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : BOOLEAN;
  573. PROCEDURE LT_UpdateStrings(last : pLayoutHandle);
  574. PROCEDURE LT_DisposeMenu(last : pMenu);
  575. FUNCTION LT_NewMenuTemplate(par1 : pScreen; par2 : pTextAttr; par3 : pImage; par4 : pImage; VAR par5 : LONGINT; last : pNewMenu) : pMenu;
  576. FUNCTION LT_NewMenuTagList(tags : pTagItem) : pMenu;
  577. PROCEDURE LT_MenuControlTagList(par1 : pWindow; par2 : pMenu; tags : pTagItem);
  578. FUNCTION LT_GetMenuItem(par1 : pMenu; last : ulong) : pMenuItem;
  579. FUNCTION LT_FindMenuCommand(par1 : pMenu; par2 : ulong; par3 : ulong; last : pGadget) : pMenuItem;
  580. PROCEDURE LT_NewLevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
  581. PROCEDURE LT_Refresh(last : pLayoutHandle);
  582. PROCEDURE LT_CatchUpRefresh(last : pLayoutHandle);
  583. FUNCTION LT_GetWindowUserData(par1 : pWindow; last : POINTER) : POINTER;
  584.  
  585. VAR GTLayoutBase : pLibrary;
  586.     gtlayout_exit : pointer;
  587.  
  588. IMPLEMENTATION
  589.  
  590. uses msgbox;
  591.  
  592. PROCEDURE LT_LevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
  593. BEGIN
  594.   ASM
  595.     MOVE.L    A6,-(A7)
  596.     MOVEA.L    par1,A0
  597.     MOVEA.L    par2,A1
  598.     MOVEA.L    par3,A2
  599.     MOVE.L    par4,D0
  600.     MOVE.L    par5,D1
  601.     MOVEA.L    par6,A3
  602.     MOVEA.L    par7,A5
  603.     MOVE.L    last,D2
  604.     MOVEA.L    GTLayoutBase,A6
  605.     JSR    -030(A6)
  606.     MOVEA.L    (A7)+,A6
  607.   END;
  608. END;
  609.  
  610. PROCEDURE LT_DeleteHandle(last : pLayoutHandle);
  611. BEGIN
  612.   ASM
  613.     MOVE.L    A6,-(A7)
  614.     MOVEA.L    last,A0
  615.     MOVEA.L    GTLayoutBase,A6
  616.     JSR    -036(A6)
  617.     MOVEA.L    (A7)+,A6
  618.   END;
  619. END;
  620.  
  621. FUNCTION LT_CreateHandle(par1 : pScreen; last : pTextAttr) : pLayoutHandle;
  622. BEGIN
  623.   ASM
  624.     MOVE.L    A6,-(A7)
  625.     MOVEA.L    par1,A0
  626.     MOVEA.L    last,A1
  627.     MOVEA.L    GTLayoutBase,A6
  628.     JSR    -042(A6)
  629.     MOVEA.L    (A7)+,A6
  630.     MOVE.L    D0,@RESULT
  631.   END;
  632. END;
  633.  
  634. FUNCTION LT_CreateHandleTagList(par1 : pScreen; tags : pTagItem) : pLayoutHandle;
  635. BEGIN
  636.   ASM
  637.     MOVE.L    A6,-(A7)
  638.     MOVEA.L    par1,A0
  639.     MOVEA.L    tags,A1
  640.     MOVEA.L    GTLayoutBase,A6
  641.     JSR    -048(A6)
  642.     MOVEA.L    (A7)+,A6
  643.     MOVE.L    D0,@RESULT
  644.   END;
  645. END;
  646.  
  647. FUNCTION LT_Rebuild(par1 : pLayoutHandle; par2 : pIBox; par3 : LONGINT; par4 : LONGINT; last : LONGINT) : BOOLEAN;
  648. BEGIN
  649.   ASM
  650.     MOVE.L    A6,-(A7)
  651.     MOVEA.L    par1,A0
  652.     MOVEA.L    par2,A1
  653.     MOVEA.L    par3,A2
  654.     MOVE.L    par4,D0
  655.     MOVE.L    last,D1
  656.     MOVEA.L    GTLayoutBase,A6
  657.     JSR    -054(A6)
  658.     MOVEA.L    (A7)+,A6
  659.     TST.W    D0
  660.     BEQ.B    @end
  661.     MOVEQ    #1,D0
  662.   @end:    MOVE.B    D0,@RESULT
  663.   END;
  664. END;
  665.  
  666. PROCEDURE LT_HandleInput(par1 : pLayoutHandle; par2 : ulong; par3 : ulong;  par4 : WORD; last : pGadget);
  667. BEGIN
  668.   ASM
  669.     MOVE.L    A6,-(A7)
  670.     MOVEA.L    par1,A0
  671.     MOVE.L    par2,D0
  672.     MOVEA.L    par3,A1
  673.     MOVEA.L    par4,A2
  674.     MOVEA.L    last,A3
  675.     MOVEA.L    GTLayoutBase,A6
  676.     JSR    -060(A6)
  677.     MOVEA.L    (A7)+,A6
  678.   END;
  679. END;
  680.  
  681. PROCEDURE LT_BeginRefresh(last : pLayoutHandle);
  682. BEGIN
  683.   ASM
  684.     MOVE.L    A6,-(A7)
  685.     MOVEA.L    last,A0
  686.     MOVEA.L    GTLayoutBase,A6
  687.     JSR    -066(A6)
  688.     MOVEA.L    (A7)+,A6
  689.   END;
  690. END;
  691.  
  692. PROCEDURE LT_EndRefresh(par1 : pLayoutHandle; last : LONGINT);
  693. BEGIN
  694.   ASM
  695.     MOVE.L    A6,-(A7)
  696.     MOVEA.L    par1,A0
  697.     MOVE.L    last,D0
  698.     MOVEA.L    GTLayoutBase,A6
  699.     JSR    -072(A6)
  700.     MOVEA.L    (A7)+,A6
  701.   END;
  702. END;
  703.  
  704. FUNCTION LT_GetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : LONGINT;
  705. BEGIN
  706.   ASM
  707.     MOVE.L    A6,-(A7)
  708.     MOVEA.L    par1,A0
  709.     MOVE.L    par2,D0
  710.     MOVEA.L    tags,A1
  711.     MOVEA.L    GTLayoutBase,A6
  712.     JSR    -078(A6)
  713.     MOVEA.L    (A7)+,A6
  714.     MOVE.L    D0,@RESULT
  715.   END;
  716. END;
  717.  
  718. PROCEDURE LT_SetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem);
  719. BEGIN
  720.   ASM
  721.     MOVE.L    A6,-(A7)
  722.     MOVEA.L    par1,A0
  723.     MOVE.L    par2,D0
  724.     MOVEA.L    tags,A1
  725.     MOVEA.L    GTLayoutBase,A6
  726.     JSR    -084(A6)
  727.     MOVEA.L    (A7)+,A6
  728.   END;
  729. END;
  730.  
  731. PROCEDURE LT_AddA(par1 : pLayoutHandle; par2 : LONGINT; par3 : pCHAR; par4 : LONGINT; tags : pTagItem);
  732. BEGIN
  733.   ASM
  734.     MOVE.L    A6,-(A7)
  735.     MOVEA.L    par1,A0
  736.     MOVE.L    par2,D0
  737.     MOVE.L    par3,D1
  738.     MOVE.L    par4,D2
  739.     MOVEA.L    tags,A1
  740.     MOVEA.L    GTLayoutBase,A6
  741.     JSR    -090(A6)
  742.     MOVEA.L    (A7)+,A6
  743.   END;
  744. END;
  745.  
  746. PROCEDURE LT_NewA(par1 : pLayoutHandle; tags : pTagItem);
  747. BEGIN
  748.   ASM
  749.     MOVE.L    A6,-(A7)
  750.     MOVEA.L    par1,A0
  751.     MOVEA.L    tags,A1
  752.     MOVEA.L    GTLayoutBase,A6
  753.     JSR    -096(A6)
  754.     MOVEA.L    (A7)+,A6
  755.   END;
  756. END;
  757.  
  758. PROCEDURE LT_EndGroup(last : pLayoutHandle);
  759. BEGIN
  760.   ASM
  761.     MOVE.L    A6,-(A7)
  762.     MOVEA.L    last,A0
  763.     MOVEA.L    GTLayoutBase,A6
  764.     JSR    -102(A6)
  765.     MOVEA.L    (A7)+,A6
  766.   END;
  767. END;
  768.  
  769. FUNCTION LT_LayoutA(par1 : pLayoutHandle; par2 : pCHAR; par3 : pIBox; par4 : LONGINT; par5 : LONGINT; par6 : ulong; par7 : LONGINT; tags : pTagItem) : pWindow;
  770. BEGIN
  771.   ASM
  772.     MOVE.L    A6,-(A7)
  773.     MOVEA.L    par1,A0
  774.     MOVEA.L    par2,A1
  775.     MOVEA.L    par3,A2
  776.     MOVE.L    par4,D0
  777.     MOVE.L    par5,D1
  778.     MOVE.L    par6,D2
  779.     MOVE.L    par7,D3
  780.     MOVEA.L    tags,A3
  781.     MOVEA.L    GTLayoutBase,A6
  782.     JSR    -108(A6)
  783.     MOVEA.L    (A7)+,A6
  784.     MOVE.L    D0,@RESULT
  785.   END;
  786. END;
  787.  
  788. FUNCTION LT_LayoutMenusA(par1 : pLayoutHandle; par2 : pNewMenu; tags : pTagItem) : pMenu;
  789. BEGIN
  790.   ASM
  791.     MOVE.L    A6,-(A7)
  792.     MOVEA.L    par1,A0
  793.     MOVEA.L    par2,A1
  794.     MOVEA.L    tags,A2
  795.     MOVEA.L    GTLayoutBase,A6
  796.     JSR    -114(A6)
  797.     MOVEA.L    (A7)+,A6
  798.     MOVE.L    D0,@RESULT
  799.   END;
  800. END;
  801.  
  802. FUNCTION LT_LabelWidth(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
  803. BEGIN
  804.   ASM
  805.     MOVE.L    A6,-(A7)
  806.     MOVEA.L    par1,A0
  807.     MOVEA.L    last,A1
  808.     MOVEA.L    GTLayoutBase,A6
  809.     JSR    -138(A6)
  810.     MOVEA.L    (A7)+,A6
  811.     MOVE.L    D0,@RESULT
  812.   END;
  813. END;
  814.  
  815. FUNCTION LT_LabelChars(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
  816. BEGIN
  817.   ASM
  818.     MOVE.L    A6,-(A7)
  819.     MOVEA.L    par1,A0
  820.     MOVEA.L    last,A1
  821.     MOVEA.L    GTLayoutBase,A6
  822.     JSR    -144(A6)
  823.     MOVEA.L    (A7)+,A6
  824.     MOVE.L    D0,@RESULT
  825.   END;
  826. END;
  827.  
  828. PROCEDURE LT_LockWindow(last : pWindow);
  829. BEGIN
  830.   ASM
  831.     MOVE.L    A6,-(A7)
  832.     MOVEA.L    last,A0
  833.     MOVEA.L    GTLayoutBase,A6
  834.     JSR    -150(A6)
  835.     MOVEA.L    (A7)+,A6
  836.   END;
  837. END;
  838.  
  839. PROCEDURE LT_UnlockWindow(last : pWindow);
  840. BEGIN
  841.   ASM
  842.     MOVE.L    A6,-(A7)
  843.     MOVEA.L    last,A0
  844.     MOVEA.L    GTLayoutBase,A6
  845.     JSR    -156(A6)
  846.     MOVEA.L    (A7)+,A6
  847.   END;
  848. END;
  849.  
  850. PROCEDURE LT_DeleteWindowLock(last : pWindow);
  851. BEGIN
  852.   ASM
  853.     MOVE.L    A6,-(A7)
  854.     MOVEA.L    last,A0
  855.     MOVEA.L    GTLayoutBase,A6
  856.     JSR    -162(A6)
  857.     MOVEA.L    (A7)+,A6
  858.   END;
  859. END;
  860.  
  861. PROCEDURE LT_ShowWindow(par1 : pLayoutHandle; last : LONGINT);
  862. BEGIN
  863.   ASM
  864.     MOVE.L    A6,-(A7)
  865.     MOVEA.L    par1,A0
  866.     MOVEA.L    last,A1
  867.     MOVEA.L    GTLayoutBase,A6
  868.     JSR    -168(A6)
  869.     MOVEA.L    (A7)+,A6
  870.   END;
  871. END;
  872.  
  873. PROCEDURE LT_Activate(par1 : pLayoutHandle; last : LONGINT);
  874. BEGIN
  875.   ASM
  876.     MOVE.L    A6,-(A7)
  877.     MOVEA.L    par1,A0
  878.     MOVE.L    last,D0
  879.     MOVEA.L    GTLayoutBase,A6
  880.     JSR    -174(A6)
  881.     MOVEA.L    (A7)+,A6
  882.   END;
  883. END;
  884.  
  885. FUNCTION LT_PressButton(par1 : pLayoutHandle; last : LONGINT) : BOOLEAN;
  886. BEGIN
  887.   ASM
  888.     MOVE.L    A6,-(A7)
  889.     MOVEA.L    par1,A0
  890.     MOVE.L    last,D0
  891.     MOVEA.L    GTLayoutBase,A6
  892.     JSR    -180(A6)
  893.     MOVEA.L    (A7)+,A6
  894.     TST.W    D0
  895.     BEQ.B    @end
  896.     MOVEQ    #1,D0
  897.   @end:    MOVE.B    D0,@RESULT
  898.   END;
  899. END;
  900.  
  901. FUNCTION LT_GetCode(par1 : ulong; par2 : ulong; par3 : ulong; last : pGadget) : LONGINT;
  902. BEGIN
  903.   ASM
  904.     MOVE.L    A6,-(A7)
  905.     MOVE.L    par1,D0
  906.     MOVE.L    par2,D1
  907.     MOVE.L    par3,D2
  908.     MOVEA.L    last,A0
  909.     MOVEA.L    GTLayoutBase,A6
  910.     JSR    -186(A6)
  911.     MOVEA.L    (A7)+,A6
  912.     MOVE.L    D0,@RESULT
  913.   END;
  914. END;
  915.  
  916. FUNCTION LT_GetIMsg(last : pLayoutHandle) : pIntuiMessage;
  917. BEGIN
  918.   ASM
  919.     MOVE.L    A6,-(A7)
  920.     MOVEA.L    last,A0
  921.     MOVEA.L    GTLayoutBase,A6
  922.     JSR    -192(A6)
  923.     MOVEA.L    (A7)+,A6
  924.     MOVE.L    D0,@RESULT
  925.   END;
  926. END;
  927.  
  928. PROCEDURE LT_ReplyIMsg(last : pIntuiMessage);
  929. BEGIN
  930.   ASM
  931.     MOVE.L    A6,-(A7)
  932.     MOVEA.L    last,A0
  933.     MOVEA.L    GTLayoutBase,A6
  934.     JSR    -198(A6)
  935.     MOVEA.L    (A7)+,A6
  936.   END;
  937. END;
  938.  
  939. FUNCTION LT_BuildA(par1 : pLayoutHandle; tags : pTagItem) : pWindow;
  940. BEGIN
  941.   ASM
  942.     MOVE.L    A6,-(A7)
  943.     MOVEA.L    par1,A0
  944.     MOVEA.L    tags,A1
  945.     MOVEA.L    GTLayoutBase,A6
  946.     JSR    -204(A6)
  947.     MOVEA.L    (A7)+,A6
  948.     MOVE.L    D0,@RESULT
  949.   END;
  950. END;
  951.  
  952. FUNCTION LT_RebuildTagList(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : BOOLEAN;
  953. BEGIN
  954.   ASM
  955.     MOVE.L    A6,-(A7)
  956.     MOVEA.L    par1,A0
  957.     MOVE.L    par2,D0
  958.     MOVEA.L    tags,A1
  959.     MOVEA.L    GTLayoutBase,A6
  960.     JSR    -210(A6)
  961.     MOVEA.L    (A7)+,A6
  962.     TST.W    D0
  963.     BEQ.B    @end
  964.     MOVEQ    #1,D0
  965.   @end:    MOVE.B    D0,@RESULT
  966.   END;
  967. END;
  968.  
  969. PROCEDURE LT_UpdateStrings(last : pLayoutHandle);
  970. BEGIN
  971.   ASM
  972.     MOVE.L    A6,-(A7)
  973.     MOVEA.L    last,A0
  974.     MOVEA.L    GTLayoutBase,A6
  975.     JSR    -216(A6)
  976.     MOVEA.L    (A7)+,A6
  977.   END;
  978. END;
  979.  
  980. PROCEDURE LT_DisposeMenu(last : pMenu);
  981. BEGIN
  982.   ASM
  983.     MOVE.L    A6,-(A7)
  984.     MOVEA.L    last,A0
  985.     MOVEA.L    GTLayoutBase,A6
  986.     JSR    -222(A6)
  987.     MOVEA.L    (A7)+,A6
  988.   END;
  989. END;
  990.  
  991. FUNCTION LT_NewMenuTemplate(par1 : pScreen; par2 : pTextAttr; par3 : pImage; par4 : pImage; VAR par5 : LONGINT; last : pNewMenu) : pMenu;
  992. BEGIN
  993.   ASM
  994.     MOVE.L    A6,-(A7)
  995.     MOVEA.L    par1,A0
  996.     MOVEA.L    par2,A1
  997.     MOVEA.L    par3,A2
  998.     MOVEA.L    par4,A3
  999.     MOVE.L    par5,D0
  1000.     MOVE.L    last,D1
  1001.     MOVEA.L    GTLayoutBase,A6
  1002.     JSR    -228(A6)
  1003.     MOVEA.L    (A7)+,A6
  1004.     MOVE.L    D0,@RESULT
  1005.   END;
  1006. END;
  1007.  
  1008. FUNCTION LT_NewMenuTagList(tags : pTagItem) : pMenu;
  1009. BEGIN
  1010.   ASM
  1011.     MOVE.L    A6,-(A7)
  1012.     MOVEA.L    tags,A0
  1013.     MOVEA.L    GTLayoutBase,A6
  1014.     JSR    -234(A6)
  1015.     MOVEA.L    (A7)+,A6
  1016.     MOVE.L    D0,@RESULT
  1017.   END;
  1018. END;
  1019.  
  1020. PROCEDURE LT_MenuControlTagList(par1 : pWindow; par2 : pMenu; tags : pTagItem);
  1021. BEGIN
  1022.   ASM
  1023.     MOVE.L    A6,-(A7)
  1024.     MOVEA.L    par1,A0
  1025.     MOVEA.L    par2,A1
  1026.     MOVEA.L    tags,A2
  1027.     MOVEA.L    GTLayoutBase,A6
  1028.     JSR    -240(A6)
  1029.     MOVEA.L    (A7)+,A6
  1030.   END;
  1031. END;
  1032.  
  1033. FUNCTION LT_GetMenuItem(par1 : pMenu; last : ulong) : pMenuItem;
  1034. BEGIN
  1035.   ASM
  1036.     MOVE.L    A6,-(A7)
  1037.     MOVEA.L    par1,A0
  1038.     MOVE.L    last,D0
  1039.     MOVEA.L    GTLayoutBase,A6
  1040.     JSR    -246(A6)
  1041.     MOVEA.L    (A7)+,A6
  1042.     MOVE.L    D0,@RESULT
  1043.   END;
  1044. END;
  1045.  
  1046. FUNCTION LT_FindMenuCommand(par1 : pMenu; par2 : ulong; par3 : ulong; last : pGadget) : pMenuItem;
  1047. BEGIN
  1048.   ASM
  1049.     MOVE.L    A6,-(A7)
  1050.     MOVEA.L    par1,A0
  1051.     MOVE.L    par2,D0
  1052.     MOVE.L    par3,D1
  1053.     MOVEA.L    last,A1
  1054.     MOVEA.L    GTLayoutBase,A6
  1055.     JSR    -252(A6)
  1056.     MOVEA.L    (A7)+,A6
  1057.     MOVE.L    D0,@RESULT
  1058.   END;
  1059. END;
  1060.  
  1061. PROCEDURE LT_NewLevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
  1062. BEGIN
  1063.   ASM
  1064.     MOVE.L    A6,-(A7)
  1065.     MOVEA.L    par1,A0
  1066.     MOVEA.L    par2,A1
  1067.     MOVEA.L    par3,A2
  1068.     MOVE.L    par4,D0
  1069.     MOVE.L    par5,D1
  1070.     MOVEA.L    par6,A3
  1071.     MOVE.L    par7,D3
  1072.     MOVE.L    last,D2
  1073.     MOVEA.L    GTLayoutBase,A6
  1074.     JSR    -258(A6)
  1075.     MOVEA.L    (A7)+,A6
  1076.   END;
  1077. END;
  1078.  
  1079. PROCEDURE LT_Refresh(last : pLayoutHandle);
  1080. BEGIN
  1081.   ASM
  1082.     MOVE.L    A6,-(A7)
  1083.     MOVEA.L    last,A0
  1084.     MOVEA.L    GTLayoutBase,A6
  1085.     JSR    -264(A6)
  1086.     MOVEA.L    (A7)+,A6
  1087.   END;
  1088. END;
  1089.  
  1090. PROCEDURE LT_CatchUpRefresh(last : pLayoutHandle);
  1091. BEGIN
  1092.   ASM
  1093.     MOVE.L    A6,-(A7)
  1094.     MOVEA.L    last,A0
  1095.     MOVEA.L    GTLayoutBase,A6
  1096.     JSR    -270(A6)
  1097.     MOVEA.L    (A7)+,A6
  1098.   END;
  1099. END;
  1100.  
  1101. FUNCTION LT_GetWindowUserData(par1 : pWindow; last : POINTER) : POINTER;
  1102. BEGIN
  1103.   ASM
  1104.     MOVE.L    A6,-(A7)
  1105.     MOVEA.L    par1,A0
  1106.     MOVEA.L    last,A1
  1107.     MOVEA.L    GTLayoutBase,A6
  1108.     JSR    -276(A6)
  1109.     MOVEA.L    (A7)+,A6
  1110.     MOVE.L    D0,@RESULT
  1111.   END;
  1112. END;
  1113.  
  1114. procedure CloseGTLayoutLibrary;
  1115. begin
  1116.     ExitProc := gtlayout_exit;
  1117.     if GTLayoutBase <> nil then begin
  1118.         CloseLibrary(GTLayoutBase);
  1119.         GTLayoutBase := nil;
  1120.     end;
  1121. end;
  1122.  
  1123. const
  1124.     VERSION : string[1] = '0';
  1125.  
  1126. begin
  1127.     GTLayoutBase := nil;
  1128.     GTLayOutBase := OpenLibrary(GTLAYOUTNAME,0);
  1129.     if GTLayoutBase <> nil then begin
  1130.         gtlayout_exit := ExitProc;
  1131.         ExitProc := @CloseGTLayoutLibrary;
  1132.     end else begin
  1133.         MessageBox('FPC Pascal Error',
  1134.                     'Can''t open gtlayout.library version ' + 
  1135.                     VERSION +
  1136.                     chr(10) + 
  1137.                     'Deallocating resources and closing down',
  1138.                     'Oops');
  1139.         halt(20);
  1140.     end;
  1141.  
  1142. END. (* UNIT GTLAYOUT *)
  1143.